% Cosas copadas para usar en los algoritmos
% uso: \ASIGNAR[comentario]{a}{b}, hace a <- b y pone un comentario (este parametro es opcional)
\newcommand{\ASIGNAR}[3][]{\STATE #2 $\leftarrow$ #3 \ifthenelse{\equal{#1}{}}{}{\COMMENT{#1}}}
\newcommand{\MODIFICAR}[2][]{\STATE #2 \ifthenelse{\equal{#1}{}}{}{\COMMENT{#1}}}

% bonitos renombres
\def\SET{\ASIGNAR}
\def\DO{\MODIFICAR}
\def\TYPE{\texttt}

% para declarar variables (es bastante tonto, solo para ser uniformes)
% \VAR{n}{int} produce: \textbf{var} $blah$ : blah
% para hacer comentarios usar
% \VAR[comentario]{blah}{blah}
% NOTA: usar \TYPE en el segundo campo de manera logica:
% \VAR[declaro un array de bools de n+1 elementos]{n}{\TYPE{array<bool>}[n+1]}
\newcommand{\VAR}[3][]{\STATE \textbf{var} \ensuremath{#2} : #3\ifthenelse{\equal{#1}{}}{}{\COMMENT{#1}}}

\newcommand{\CONTINUE}[0]{\STATE \textbf{continue}}

% Para hacer un comentario fuera de un algorithmic pero que se vea igual
\newcommand{\comentario}[1]{\begin{small}\textit{// #1}\end{small}}

% Comentarios estilo C/C++ (un ; o un # tampoco estaria mal)
% la // no queda muy bonita, propongan otro
\renewcommand{\algorithmiccomment}[1]{\hspace{1cm}\begin{small}\textit{// #1}\end{small}}

% Para hacer PRE y POST condiciones dentro de un algorithmic environment
% Uso: \PRE{contenido} y \POST{contenido}
\newcommand{\PRE}[1]{\REQUIRE{#1}}
\newcommand{\POST}[1]{\ENSURE{#1}}
\renewcommand{\algorithmicrequire}[1]{\textbf{Requiere:} }
\renewcommand{\algorithmicensure}[1]{\textbf{Asegura:} }

\floatname{algorithm}{Algoritmo}

% Por si queremos hacer ret <- resultado en vez de return resultado
% \renewcommand{\algorithmicreturn}{$ret\ \leftarrow$}

% Se pueden redefinir otras cosas (ver el algorithms.pdf)

% Para declarar funciones en disenio: \dfunc{nombrefuncion}{modo_pasaje_parm/nombre_var:tipo_var,...}{tipo_retorno}
% NOTA: si no devuelve nada poner {} en vez de {tipo_retorno}
% NOTA2: Parser robado de tad.sty =b
\def\finparams{zMqtPfKkJ}
\def\parsearparams#1{\ifx#1\finparams\ifmmode$\fi\else\if#1:${ : }%
\else\if#1!{\\}%
\else\if#1/{\ }$% esto pasa despues de un in/out/inout (prendo mathmode)
\else\if#1,{$,$\ }%
\else#1\fi\fi\fi\fi\expandafter\parsearparams\fi}
\def\funcparams#1{\parsearparams#1\finparams}

\def\funcppal#1#2#3{\hbox{
\setbox2=\hbox{\texttt{\funcparams{#2}}}%
\texttt{#3} #1(\box2)}}
\def\dfunc#1#2#3{\funcppal{#1}{#2}{#3}}

%\newcommand{\TRUE}[0]{\textsc{true}}
%\newcommand{\FALSE}[0]{\textsc{false}}
